<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');
session_start();

class Forgot_Password extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->model('user', '', true);
        $this->load->model("check_institute_id");
        $this->load->library('authentication');
        $this->load->helper('t');


        if ($this->session->userdata('logged_in')) {
            $this->LoggedUser = $this->user->getLoggedUser();
            switch ($this->LoggedUser->title) {
                case 'SD':
                    redirect('sd/home');
                    break;
                case 'HR':
                    redirect('hr_sc/home');
                    break;
                case 'SC':
                    redirect('hr_sc/home');
                    break;
                case 'RSM':
                    redirect('rsm_kam/home');
                    break;
                case 'KAM':
                    redirect('rsm_kam/home');
                    break;
                case 'SS':
                    redirect('ss_kas/home');
                    break;
                case 'KAS':
                    redirect('ss_kas/home');
                    break;
                default:
                    redirect('user/home');
                    break;
            }
        }

//        Authentication::redirectIfLogged();
    }

    function index($institute_id = 'MQ%3D%3D') {
//        if ($this->session->userdata('logged_in')) {
//            
//            redirect('home');
//        }

        Authentication::redirectIfLogged();

        if ($this->input->post('Command') == 'Submit') {

            $returnData = $this->_PostSubmit();
        }

        $institute_id = base64_decode(urldecode($institute_id));
        $result = $this->check_institute_id->check_ins_id($institute_id);
        if ($result == 0) {
            $this->load->view('invalid_url');
        } else {
            if ($result['status'] == 0) {
                redirect('login/status_deactivate');
            }
            $this->load->helper(array('form'));

            if (isset($returnData) && $returnData == 'OK') {
                $viewData['messageType'] = 'success';
                $viewData['message'] = 'Kiểm tra email và làm theo hướng dẫn.';
            } elseif (isset($returnData) && $returnData == false) {
                $viewData['messageType'] = 'error';
                $viewData['message'] = 'Địa chỉ email không tồn tại trong hệ thống.';
            }


            $this->load->view('general/forgot_password', $viewData);
        }
    }

    function status_deactivate() {
        $this->load->view('status_deactive');
    }

    function confirm($user_code, $key) {
        $user = $this->user->get_user_by_code($user_code);

        $this->load->model('ResetPassword');
        $resetPassword = $this->ResetPassword->get_by_user_code($user['code']);

        if ($resetPassword == false) {
            show_404();
        }

        if (time() > strtotime($resetPassword['date_requested']) + 24 * 60 * 60 ) { // sau 24h
            // xóa request
            $this->ResetPassword->delete($resetPassword['id']);
            show_404();
        }

        // kiểm tra key
        if (md5($resetPassword['id']) == $key) {
            // random pass, cập nhật và gửi cho user
            $newPassword = randomPassword();

            if ($user != false) {
                $user['password'] = md5($newPassword);
                $this->user->update($user);

                send_mail_password($user['email'], $user['name'], $user['username'], $newPassword);

                // xóa request
                $this->ResetPassword->delete($resetPassword['id']);

                redirect('login');
            } else {
                show_404();
            }
        } else {
            show_404();
        }
    }

    function _PostSubmit() {
        //This method will have the credentials validation
        $this->load->library('form_validation');
        $this->load->helper(array('form', 'url'));

        $this->form_validation->set_rules('email', 'Email', 'required|valid_email');
        $this->form_validation->set_message('required', 'Chưa nhập địa chỉ email');
        $this->form_validation->set_message('valid_email', 'Địa chỉ email không hợp lệ');

        //$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');
        //$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean');

        if ($this->form_validation->run() == FALSE) {

            return false;
        }
        $emailAddress = $this->input->post('email');

        // gửi email có link xác nhận

        $user = $this->user->get_user_by_email($emailAddress);

        if ($user != false) {
            $this->load->model('ResetPassword');
            // kiểm tra coi đã có yêu cầu rồi hay chưa
            $ResetPass = $this->ResetPassword->get_by_user_code($user['code']);


            // trong 24 tiếng yêu cầu tiếp -> phớt lờ
            // sau 24 tiếng yêu cầu tiếp -> xóa cái cũ, tạo cái mới
            $resetPassId = 0;
            if ($ResetPass == false) { // chưa yêu cầu
                $new = array(
                    'user_code' => $user['code']
                );
                $this->ResetPassword->insert($new);
                $resetPassId = $this->db->insert_id();
            } else { // đã yêu cầu rồi
                if (strtotime($ResetPass['date_requested']) + 24 * 60 * 60 > time()) { // sau 24h
                    $this->ResetPassword->delete($ResetPass['id']);
                    $new = array(
                        'user_code' => $user['code']
                    );
                    $this->ResetPassword->insert($new);
                    $resetPassId = $this->db->insert_id();
                } else {
                    return 'OK';
                }
            }

            $key = md5($resetPassId);
            $link = site_url('/forgot_password/confirm/' . $user['code'] . '/' . $key);
            send_mail_confirm_change_password($emailAddress, $user['name'], $user['username'], $link);
            $_SESSION['time'] = time();
            return 'OK';
        } else {
            return false;
        }
    }

}

?>
